package com.example.BlockChain.configuration;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.client.BufferingClientHttpRequestFactory;
import org.springframework.http.client.SimpleClientHttpRequestFactory;
import org.springframework.http.converter.StringHttpMessageConverter;
import org.springframework.web.client.RestTemplate;

import java.nio.charset.StandardCharsets;

// 声明当前类为 Spring 的配置类，Spring 会自动加载其中的 Bean 配置
@Configuration
public class RestTemplateConfig {

	/**
	 * 定义一个 RestTemplate 类型的 Bean，用于全局注入。
	 * @return 配置好的 RestTemplate 对象
	 */
	@Bean
	public RestTemplate getRestTemplate() {
		// 使用 SimpleClientHttpRequestFactory 作为底层实现
		SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();

		// 包装为 BufferingClientHttpRequestFactory，支持多次读取响应体
		BufferingClientHttpRequestFactory bufferingClientHttpRequestFactory =
				new BufferingClientHttpRequestFactory(factory);

		// 设置读取超时时间（180,000 毫秒 = 180 秒）
		factory.setReadTimeout(18000);

		// 设置连接超时时间（180,000 毫秒 = 180 秒）
		factory.setConnectTimeout(18000);

		// 创建 RestTemplate 对象，并设置自定义的请求工厂
		RestTemplate restTemplate = new RestTemplate(bufferingClientHttpRequestFactory);

		// 设置消息转换器的字符集为 UTF-8，确保请求和响应中的字符串支持中文或特殊字符
		restTemplate.getMessageConverters().set(1,
				new StringHttpMessageConverter(StandardCharsets.UTF_8));

		return restTemplate; // 返回配置完成的 RestTemplate 实例
	}
}
